#include "utils.hpp"
#define DEVICENUM 0

int main(int argc, char **argv)
{
    using namespace CPUCUDATools;
    cudaSetDevice(DEVICENUM);

    const int resize_w = 1920;
    const int resize_h = 1080;
    const int run_times = 1000; // 执行总次数，并计算平均时间
    const std::string image_path = "images/demo_960x540.png";

    // 1. opencv使用默认resize，默认是双线性差值方式
    cv::Mat opencv_res = opencv_resize(image_path, resize_w, resize_h, run_times);

    // 2. 使用cuda自定义的resize，实现的是双线性差值方式
    float *resize_data_host = (float *)malloc(resize_h * resize_w * 3 * sizeof(float));

    cuda_resize(resize_data_host, image_path, resize_w, resize_h, run_times);
    verify_result(resize_data_host, opencv_res, resize_w, resize_h);
    free(resize_data_host);

    /* 3. resize结论：对于下采样，且整除的，结果能与opencv保持一致
    否则，会有细微偏差，比如>0会有异常
    但是这里的resize cuda操作与多个来源进行了对比，是与opencv接近程度最高的一个实现
    基本都是偏差1个像素值，没有见到像素值误差超过1的
    */
    return 0;
}
